<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
    <TITLE>eGenix.com mx Extensions for Python</TITLE>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
    <STYLE TYPE="text/css">
      p { text-align: justify; }
      ul.indent { }
      body { }
    </STYLE>
</HEAD>

  <BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000">

    <HR NOSHADE WIDTH="100%">
    <H2>eGenix.com mx Extensions for Python</H2>

    <HR SIZE=1 NOSHADE WIDTH="100%">
    <TABLE WIDTH="100%">
      <TR>
	<TD>
	  <SMALL>
	    <A HREF="#mxBASE">BASE package</A> <BR> &nbsp; &nbsp; (
	    <A HREF="#mxDateTime">mxDateTime</A> :
	    <A HREF="#mxTextTools">mxTextTools</A> :
	    <A HREF="#mxStack">mxStack</A> :
	    <A HREF="#mxTools">mxTools</A> :
	    <A HREF="#mxProxy">mxProxy</A> :
	    <A HREF="#mxURL">mxURL</A> :
	    <A HREF="#mxUID">mxUID</A> :
	    <A HREF="#History-mxBASE">History</A> :
	    <A HREF="#Download-mxBASE"><B>Download</B></A>
	    ) <BR>
	    <A HREF="#mxCOMMERCIAL">COMMERCIAL package</A> <BR>  &nbsp; &nbsp; (
	    <A HREF="#mxODBC">mxODBC</A> :
	    <A HREF="#History-mxCOMMERCIAL">History</A> :
	    <A HREF="#BuyLicenses"><B>Buy Licenses</B></A>  :
	    <A HREF="#BlackAdder"><B>Special Offer</B></A> :
	    <A HREF="#Download-mxCOMMERCIAL"><B>Download</B></A>
	    ) <BR>
	    <A HREF="#mxEXPERIMENTAL">EXPERIMENTAL package</A> <BR>  &nbsp; &nbsp; (
	    <A HREF="#mxNumber">mxNumber</A> :
	    <A HREF="#mxTidy">mxTidy</A> :
	    <A HREF="#History-mxEXPERIMENTAL">History</A> :
	    <A HREF="#Download-mxEXPERIMENTAL"><B>Download</B></A>
	    ) <BR>
	    <A HREF="#Support"><B>Commercial Support</B></A> :
	    <A HREF="" TARGET="_top">Home</A>
	</SMALL>
	</TD>
	<TD ALIGN=RIGHT VALIGN=TOP>
	  <SMALL>
	     &nbsp; <FONT COLOR="#FF0000"></FONT> &nbsp;
	  </SMALL>
	</TD>
    </TABLE>
    <HR SIZE=1 NOSHADE WIDTH="100%">

    <A NAME="Introduction">
      
    <H3>Introduction</H3>

    <UL>

	<P>
	  The <A HREF="http://www.egenix.com/">eGenix.com</A> mx
	  Extensions for Python are a collection of professional
	  quality Python software tools which enhance <A
	  HREF="http://www.python.org/">Python</A>'s usability in many
	  important areas such as ODBC database connectivity, fast
	  text processing, date/time processing and web site
	  programming.

	<P>
	  The tools have a proven record of being portable across many
	  Unix and Windows platforms, e.g. you can write applications
	  which use an ODBC database on Windows which then run on Unix
	  platforms without change due to the consistent platforms
	  independent interfaces.

	<P>
	  All of the available packages have shown their stability
	  and usefulness in many mission critical applications and
	  various commercial settings all around the world.

	<P>
	  The two most well-known packages from the mx Extension
	  Series are <A HREF="#mxDateTime">mxDateTime</A> and <A
	  HREF="#mxODBC">mxODBC</A> providing date/time services and
	  professional ODBC database connectivity on practically all
	  supported Python platforms. These two packages enable
	  database software which is portable not only across
	  platforms, but also across database backends.

    </UL>

    <A NAME="Overview">
      
    <H3>Overview</H3>

    <UL>

      <P>
	mxODBC, mxDateTime and all other mx packages are 
	maintained by my new company <A
	HREF="http://www.egenix.com/">eGenix.com Software GmbH,
	Langenfeld</A> in Germany. This assures the availability
	of <B><A HREF="#Support">commercial support</A></B>, which is
	important for companies building applications based on the
	eGenix.com mx Extensions.
	<P>

      <P>
	All new versions of the eGenix.com mx Extensions use the
	Python distutils packaging technology to simplify installation
	and use of the many different subpackages. This is expected to
	greatly enhance the installation and usage experience of the
	software.
	<P>
	  
      <P>
	The software is delivered in three download archives: 
	<UL>
	    <LI> the <A
	HREF="#mxBASE">eGenix.com mx BASE package</A> which holds all
	the Open Source tools from the series and provides the basis
	for the other add-ons, <P>

	    <LI> the <A HREF="#mxCOMMERCIAL">eGenix.com
	mx COMMERCIAL package</A> which currently only contains the <A
	HREF="#mxODBC">mxODBC package</A> and <P>

	    <LI> the <A
	HREF="#mxEXPERIMENTAL">eGenix.com mx EXPERIMENTAL package</A>
	which we use to test drive new mx extensions before moving
	them to one of the other packages. <P>

	</UL>
	<P>
	  The packages are covered by the <A
	  HREF="mxLicense.html#Public">eGenix.com Public License</A>
	  and/or the <A HREF="mxLicense.html#Commercial">eGenix.com
	  Commercial License</A>. Details about the licenses can be
	  found on the <A
	  HREF="http://www.egenix.com/files/python/mxLicense.html">eGenix.com
	  License Page</A>.
	<P>

    </UL>

    <A NAME="Packages">
      
    <HR SIZE=1 NOSHADE WIDTH="100%">

    <H3>Packages</H3>

    <UL>

	<P>
	  The following subpackages are included in the eGenix.com mx
	  Extension series, each providing fast and efficient
	  implementations for various application domains. All
	  subpackages live in the <TT>mx</TT> top-level Python package
	  to avoid naming collisions with other Python software.

	<P>
	<TABLE BGCOLOR="#EEEEEE" CELLPADDING="5" CELLSPACING="0" BORDER="0" WIDTH="100%">
	    <TR><TD BGCOLOR="#96c8fa">
	
		<P>
		  <A HREF="#mxBASE" style="text-decoration:none;"><B>eGenix.com mx BASE Package</B></A>:

	      </TD></TR>
	    
	    <TR><TD> </TD></TR>

	    <TR><TD>

		<UL>
		    <SMALL>
		      <A HREF="mxDateTime.html">mxDateTime</A> - Generic Date/Time Datatypes <BR>
		      <A HREF="mxTextTools.html">mxTextTools</A> - Fast Text Processing Tools <BR>
		      <A HREF="mxStack.html">mxStack</A> - Fast and Memory-Efficient Stack Datatype <BR>
		      <A HREF="mxTools.html">mxTools</A> - Collection of Additional Builtins  <BR>
		      <A HREF="mxProxy.html">mxProxy</A> - Generic Object Proxy & Weak Reference Datatype <BR>
		      <A HREF="mxBeeBase.html">mxBeeBase</A> - On-disk B+Tree Database Construction Kit <BR>
		      <A HREF="mxURL.html">mxURL</A> - Efficient Storage and Management of URL/URI Information <BR>
		      <A HREF="mxUID.html">mxUID</A> - Create and Manage Unique IDs </BR>
		      <BR>
		      >>> <A HREF="#Download-mxBASE"><B>Download</B></A> <BR>
		    </SMALL>
		</UL>

	      </TD></TR>

	    <TR><TD BGCOLOR="#FFFFFF"> </TD></TR>

	    <TR><TD BGCOLOR="#96c8fa">

		<P>
		  <A HREF="#mxCOMMERCIAL" style="text-decoration:none;"><B>eGenix.com mx COMMERCIAL Package</B></A>:

	      </TD></TR>
	    
	    <TR><TD> </TD></TR>

	    <TR><TD>

		<UL>
		    <SMALL>
		      <A HREF="mxODBC.html">mxODBC</A></B> - Python DB-API compatible ODBC
		      2.0 - 3.5 database interface; <BR>
		      supports Python 1.5.2 and Unicode for Python 2.0 and later<BR>
		      <BR>
		      >>> <A HREF="#Download-mxCOMMERCIAL"><B>Download</B></A> and 
		      <A HREF="#BuyLicenses"><B>Buy Licenses</B></A><BR>
		    </SMALL>
		</UL>

	      </TD></TR>

	    <TR><TD BGCOLOR="#FFFFFF"> </TD></TR>

	    <TR><TD BGCOLOR="#96c8fa">

		<P>
		  <A HREF="#mxEXPERIMENTAL" style="text-decoration:none;"><B>eGenix.com mx EXPERIMENTAL Package</B></A>:

	      </TD></TR>
	    
	    <TR><TD> </TD></TR>

	    <TR><TD>

		<UL>
		    <SMALL>
		      <A HREF="mxNumber.html">mxNumber</A> - Interface to GNU MP's High Precision Numerics <BR>
		      <A HREF="mxTidy.html">mxTidy</A> - Interface to a library version of HTML Tidy <BR>
		      <BR>
		      >>> <A HREF="#Download-mxEXPERIMENTAL"><B>Download</B></A> <BR>
		    </SMALL>
		</UL>

	    </TD></TR>
	</TABLE>

	<BR><BR>
	
    </UL>

    <A NAME="mxBASE">
      
    <HR SIZE=1 NOSHADE WIDTH="100%">

    <H3>eGenix.com mx Extensions - BASE Package</H3>

    <DIV ALIGN=RIGHT>
      <SMALL>
	&nbsp; <FONT COLOR="#FF0000">Version 2.0.3</FONT> &nbsp;
      </SMALL>
    </DIV>

    <UL>

	<P>
	  The eGenix.com mx BASE package contains the Open Source
	  parts of the eGenix.com mx Extension series. They are
	  shipped under the new <A
	  HREF="mxLicense.html#Public">eGenix.com Public License
	  Agreement</A>. This license is an enhanced
	  version of the Python 2.0 license and allows you to use and
	  redistribute the <I>eGenix.com mx BASE</I> package in
	  commercial and non-commercial applications without having to
	  pay a fee or royalties.

	<P>
	  The following subpackages are included in the BASE package:

    <A NAME="mxDateTime">

    <H4><A HREF="mxDateTime.html">mxDateTime - Generic Date/Time Types</A></H4>

    <UL>

	<P>
	  mxDateTime is an extension package that provides three new
	  object types, DateTime, DateTimeDelta and RelativeDateTime,
	  which let you store and handle date/time values in a much
	  more natural way than by using ticks (seconds since 1.1.70
	  0:00 UTC; the encoding used by the time module).
	
	<P>
	  You can add, subtract and even multiply instances, pickle
	  and copy them and convert the results to strings, COM dates,
	  ticks and some other more esoteric values. In addition,
	  there are several convenient constructors and formatters at
	  hand to greatly simplify dealing with dates and times in
	  real-world applications.

	<P>
	  In addition to providing an easy-to-use Python interface the
	  package also exports a comfortable C API interface for other
	  extensions to build upon. This is especially interesting for
	  database applications which often have to deal with
	  date/time values (the <A HREF="#mxODBC">mxODBC</A> package
	  is one example of an extension using this interface).

    </UL>

    <A NAME="mxTextTools">

    <H4><A HREF="mxTextTools.html">mxTextTools - Fast Text Processing Tools</A></H4>

    <UL>

	<P>
	  mxTextTools is an extension package for Python that provides
	  several useful functions and types that implement
	  high-performance text manipulation and searching algorithms
	  in addition to a very flexible and extendable state machine,
	  the Tagging Engine, that allows scanning and processing text
	  based on low-level byte-code "programs" written using Python
	  tuples.  It gives you access to the speed of C without the
	  need to do any compile and link steps every time you change
	  the parsing description.

	<P>
	  Applications include parsing structured text, finding and
	  extracting text (either exact or using translation tables)
	  and recombining strings to form new text.

    </UL>
      
    <A NAME="mxStack">

    <H4><A HREF="mxStack.html">mxStack - Fast and Memory-Efficient Stack Type</A></H4>

    <UL>

	<P>
	  mxStack is an extension package that provides a new object
	  type called Stack. It works much like what you would expect
	  from such a type, having .push() and .pop() methods and
	  focusses on obtaining maximum speed at low memory costs.

    </UL>
    
    <A NAME="mxTools">

    <H4><A HREF="mxTools.html">mxTools - Collection of Additional Builtins</A></H4>

    <UL>

	<P>
	  mxTools is an extension package that includes a collection
	  of handy functions and objects giving additional
	  functionality in form of new builtins to the Python
	  programmer.

	<P>
	  The package auto-installs the new functions and objects as
	  builtins upon first import. This means that they become
	  instantely available to all other modules without any
	  further action on your part. Add the line <CODE>import
	  mx.Tools.NewBuiltins</CODE> to your site.py script and they
	  will be available to all users at your site as if they were
	  installed in the Python interpreter itself.

    </UL>
    
    <A NAME="mxProxy">

    <H4><A HREF="mxProxy.html">mxProxy - Generic Proxy Wrapper Type</A></H4>

    <UL>

	<P>
	  mxProxy is an extension package that provides a new type
	  that is suitable to implement Bastion like features without
	  the need to use restricted execution environments. 

	<P>
	  The type's main features are <I>secure data
	  encapsulation</I> (the hidden objects are not accessible
	  from Python since they are stored in internal C structures),
	  <I>customizable attribute lookup</I> methods and a
	  <I>cleanup protocol</I> that helps in breaking circular
	  references prior to object deletion.

	<P>
	  The latest version adds a very interesting new feature:
	  <I>weak references</I> which help you work with circular
	  references in a way that doesn't cause memory leakage in a
	  Python system.

    </UL>

    <A NAME="mxBeeBase">

    <H4><A HREF="mxBeeBase.html">mxBeeBase - On-disk B+Tree Based Database Kit</A></H4>

    <UL>

	<P>
	  mxBeeBase is a high performance construction kit for disk
	  based indexed databases. It offers components which you can
	  plug together to easily build your own custom mid-sized
	  databases (the current size limit is
	  <CODE>sizeof(long)</CODE> which gives you an address range
	  of around 2GB on 32-bit platforms).

	<P>
	  The two basic building blocks in mxBeeBase are
	  <I>storage</I> and <I>index</I>. Storage is implemented as
	  variable record length data storage with integrated data
	  protection features, automatic data recovery and locking for
	  multi process access. Indexes use a high performance
	  optimized B+Tree implementation built on top of <A
	  HREF="http://epaperpress.com/">Thomas Niemann</A>'s Cookbook
	  B+Tree implementation.

    </UL>

    <A NAME="mxURL">

    <H4><A HREF="mxURL.html">mxURL -  An URL Datatype</A></H4>

    <UL>

	<P>
	  mxURL provides a new datatype for storing and
	  manipulating URL values as well as a few helpers related to
	  URL building, encoding and decoding.

	<P>
	  The main intention of the package is to provide an easy to
	  use, fast and lightwheight datatype for Universal Resource
	  Locators (note the W3C now calls these URIs).

    </UL>

    <A NAME="mxUID">

    <H4><A HREF="mxUID.html">mxUID -  An UID Datatype</A></H4>

    <UL>

	<P>
	  mxUID provides a fast mechanism for generating universal
	  identification strings (UIDs). The intent is to make these
	  UIDs unique with high probability in order to serve as
	  object or data set identifiers.
	 
	<P>
	  A typical use lies in generating session IDs. Other areas
	  where unique IDs play an important role are
	  RPC-implementations, ORBs, etc.

    </UL>

    <A NAME="Download-mxBASE">

    <H4>Downloads</H4>
    
    <UL>
      
	<TABLE BGCOLOR="#EEEEEE" CELLPADDING="5">
	  <TR><TD>
	      
	      <P>
		<B>IMPORTANT:</B>

	      <P>
		By downloading, installing or using the
		<I>egenix-mx-base package</I>, you agree to the terms
		and conditions set forth in the <A
		HREF="mxLicense.html#Public">eGenix.com Public License
		Agreement</A> which is an Open Source
		license comparable to the Python license.
    
	      <P>
		<B>Commercial Support:</B> <BR> Professional level <A
		HREF="#Support">support</A> for this package as well
		as all other mx packages is available directly from
		the developers at eGenix.com.

	      <P>
		<B>Consulting:</B> <BR> eGenix.com offers professional
		consulting services around this package, including
		customized modifications, help with application design
		around this package and on-site problem solving.
		Please contact <a
		href="mailto:consulting@egenix.com">mailto:consulting@egenix.com</a>
		for details.

	      <P>
		<B>Free User Support:</B> <BR> We have created a user
		mailing list where users can help users. To sign up,
		please use the <A
		HREF="http://www.egenix.com/mailman/listinfo/egenix-users">egenix-users</A>
		mailing list web-interface.  You can unsubscribe using
		the same interface at any time.

	      <P>
		Windows:
	      <UL>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-base-2.0.4.win32-py1.5.exe">egenix-mx-base-2.0.4.win32-py1.5.exe (Windows installer, Python 1.5.2)</A>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-base-2.0.4.win32-py2.0.exe">egenix-mx-base-2.0.4.win32-py2.0.exe (Windows installer, Python 2.0.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-base-2.0.4.win32-py2.1.exe">egenix-mx-base-2.0.4.win32-py2.1.exe (Windows installer, Python 2.1.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-base-2.0.4.win32-py2.2.exe">egenix-mx-base-2.0.4.win32-py2.2.exe (Windows installer, Python 2.2.x)</A> <BR>
	      </UL>

	      <P> Linux:
	      <UL>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-base-2.0.4-py1.5_1.i386.rpm">egenix-mx-base-2.0.4-py1.5_1.i386.rpm (Binary RPM, i386, Python 1.5.2)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-base-2.0.4-py2.0_1.i386.rpm">egenix-mx-base-2.0.4-py2.0_1.i386.rpm (Binary RPM, i386, Python 2.0.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-base-2.0.4-py2.1_1.i386.rpm">egenix-mx-base-2.0.4-py2.1_1.i386.rpm (Binary RPM, i386, Python 2.1.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-base-2.0.4-py2.2_1.i386.rpm">egenix-mx-base-2.0.4-py2.2_1.i386.rpm (Binary RPM, i386, Python 2.2.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-base-2.0.4-py1.5_1.src.rpm">egenix-mx-base-2.0.4-py1.5_1.src.rpm (Source RPM, src, Python 1.5.2)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-base-2.0.4-py2.0_1.src.rpm">egenix-mx-base-2.0.4-py2.0_1.src.rpm (Source RPM, src, Python 2.0.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-base-2.0.4-py2.1_1.src.rpm">egenix-mx-base-2.0.4-py2.1_1.src.rpm (Source RPM, src, Python 2.1.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-base-2.0.4-py2.2_1.src.rpm">egenix-mx-base-2.0.4-py2.2_1.src.rpm (Source RPM, src, Python 2.2.x)</A> <BR>
	      </UL>

	      <P>
		All Platforms (source distribution):
	      <UL>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-base-2.0.4.zip">egenix-mx-base-2.0.4.zip (all platforms, C compiler, Python 1.5.2, 2.0, 2.1.x, 2.2.x)</A> 
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-base-2.0.4.tar.gz">egenix-mx-base-2.0.4.tar.gz (all platforms, C compiler, Python 1.5.2, 2.0, 2.1.x, 2.2.x)</A> <BR>
	      </UL>

	      <P>
		<B>Notes:</B> 

	      <P>
	      <UL>
		<LI>
		  The <B>Windows installer</B> includes all the
		  binaries necessary to import the extensions with a
		  one particular Python version. Please always
		  download the correct installer for your Python
		  version, otherwise you won't be able to install the
		  packages.
		  <P>

		<LI>
		  The <B>Linux binary RPMs</B> install to
		  <TT>/usr</TT>.  If you want to install the RPMs into
		  a different path <TT>/usr</TT>, then you should
		  fetch the source packages and rebuild them from
		  source.  When installing packages for multiple
		  Python versions, be sure to first install the RPM
		  for the oldest Python version and then proceed with
		  the more recent ones (or use the
		  <CODE>--force</CODE> option to install them in any
		  order).
		  <P>

	      </UL>

	    </TD></TR>
	</TABLE>
	
    </UL>

    <A NAME="Install-mxBASE">

    <H4>Installation</H4>

    <UL>
    
	<P>
	  On Unix systems supporting the <B>RPM formats</B> the
	  package can be installed using the standard operating system
	  tools, e.g. <CODE>rpm -i egenix-mx-base-xxxx.rpm</CODE> will
	  install the package and <CODE>rpm -e
	  egenix-mx-base-xxxx</CODE> deinstall it. When installing
	  packages for multiple Python versions, be sure to first
	  install the RPM for the oldest Python version and then
	  proceed with the more recent ones (or use the
	  <CODE>--force</CODE> option to install them in any order).
	  Note that the above RPMs install the extensions into
	  <TT>/usr</TT> not <TT>/usr/local</TT> as previous versions
	  did !

	<P>
	  On <B>Windows platforms</B> the preferred method for
	  installation is using the the Windows installer, since this
	  doesn't require a C compiler to be installed on the system.
	  Thanks to Thomas Heller the installer also supports
	  uninstall using the standard Windows uninstall procedure.
	  If you have trouble selecting the right Python installation,
	  you can also install the package using e.g. WinZIP -- the
	  installer .exe is a readable ZIP archive. You'll loose the
	  ability to uninstall the package, but at least you can get
	  at the included files. For Python 2.1 and below, unzip into
	  <TT>\Python\Lib</TT>; starting with Python 2.2, unzip into
	  <TT>\Python\Lib\site-packages</TT>.

	<P>
	  All other platforms can use the <A
	  HREF="http://www.python.org/sigs/distutils-sig/">distutils</A>
	  based installation which allows building and installing the
	  package using the installed Python interpreter and the
	  standard system C compiler.  On such a system, unzip the
	  package archive to a temporary directory and then run
	  <CODE>python setup.py install</CODE> to install the package
	  and <CODE>python setup.py uninstall</CODE> to uninstall it
	  again.  Documentation about the usage of distutils (which is
	  part of Python since 2.0) is available online at the <A
	  HREF="http://www.python.org/sigs/distutils-sig/doc/">distutils
	  documentation</A> site.

    </UL>
    
    <P>

    <A NAME="History-mxBASE">

    <H4>History</H4>

    <UL>

	<P>
	   Note that this change log only lists changes to the package
	   in general, not all the changes to the included
	   subpackages. Please refer to the subpackage documentation
	   for more detailed information.

<!--	      
	<P>Changes from 2.0.5 to 2.1.0:

	<UL>

	    <LI> Fixed the distutils setup to now allow defining
	    compiler options on the command line using 'python
	    setup.py mx_autoconf -DENABLE_FEATURE install'.

            <P><LI> Lots of changes in the various sub-packages. See
            the sub-package documentation for a full list of new
            features.

	    <P><LI> Added source code encoding markers to those files that
	    need it.

	    <P><LI> Moved mxURL and mxUID from the EXPERIMENTAL
	    package into the BASE package.

	    <P><LI> Added better support for Python DEBUG builds. The
	    total reference counting should now also work in case
	    object constructors raise exceptions.

	</UL>
-->

	<P>Changes from 2.0.4 to 2.0.5:

	<UL>

	    <LI> Added Python 2.3 support.

	</UL>

	<P>Changes from 2.0.3 to 2.0.4:

	<UL>

	    <LI> RPMs now install to /usr/ instead of
	    /usr/local/. This change was necessary to resynch to the
	    standard Python RPMs.

            <P><LI> The mx distutils build system was updated to the
            latest version.

	</UL>

	<P>Changes from 2.0.2 to 2.0.3:

	<UL>

	    <LI> Some cleanup of assignments to __debug__ which
            cause warnings in Python 2.1.

            <P><LI> Added some missing header files. These are needed
            by third party tools in case they rely on the provided C
            interfaces.

            <P><LI> <B>Changed</B> the error class object fullnames to
            properly include the complete package path.

            <P><LI> Corrected a bug in the free list management of the
            various types which showed up when using pymalloc.

            <P><LI> Prepared the tools for Python 2.2.

	</UL>

	<P>Changes from 2.0.1 to 2.0.2:

	<UL>

	    <LI> Added compiler support for Cygwin. Thanks to Mark
	    Hadfield for pointing out the necessary changes.

	    <P><LI> Reworked the RPM packaging for different Python
	    versions: you can now install the RPMs for different
	    Python versions side-by-side.

	    <P><LI> Updated a few packages, e.g. the mxDateTime
	    package.

	</UL>

	<P>Changes from 2.0.0 to 2.0.1:

	<UL>

	    <LI> Added back .h header files to the
	    mx-subdirectories. Third-party software was relying on
	    these files, but the distutils process did not include
	    them per default.

	    <P><LI> New release for Python 2.1.

	</UL>

    </UL>

    </UL>

    <P>

    <A NAME="mxCOMMERCIAL">

    <HR SIZE=1 NOSHADE WIDTH="100%">

    <H3>eGenix.com mx Extensions - COMMERCIAL Package</H3>

    <DIV ALIGN=RIGHT>
      <SMALL>
	&nbsp; <FONT COLOR="#FF0000">Version 2.0.4</FONT> &nbsp;
      </SMALL>
    </DIV>

    <UL>

	<P>
	  The eGenix.com mx COMMERCIAL package contains the commercial
	  parts of the eGenix.com mx Extension series. They are
	  shipped under the new <A
	  HREF="mxLicense.html#Commercial">eGenix.com Commercial
	  License Agreement</A>. This license allows use of the
	  software in non-commercial environment without fee or
	  royalty, but <a href="#BuyLicenses"><b>requires buying
	  licenses for commercial use or
	  redistribution</b></a>. Please contact <A
	  HREF="mailto:licenses@egenix.com">licenses@egenix.com</A>
	  for details about redistribution terms.

	<P>
	  Note that <B>evaluation</B> of the eGenix.com mx COMMERCIAL
	  package in commercial environments is possible during the
	  first 30 days after initial installation, so that you can
	  test the software thoroughly before making the decision to
	  buy the license or to stop using the software.

	<P>
	  The package comes with <B>full source code</B>, providing
	  you with the benefit of being able to dive into the details
	  of the implementation or to extend/adapt the functionality
	  to your needs.

	<A NAME="BlackAdder">

	<P>
	<TABLE CELLPADDING="5" CELLSPACING="0">

	  <TR><TD COLSPAN="2" BGCOLOR="#DDDDDD">
	      <FONT COLOR="#660000"><B>Special Offer</B></FONT>
	    </TD></TR>

	  <TR><TD BGCOLOR="#EEEEEE">

	      <TABLE CELLPADDING="10">
		<TR><TD>

		    <P>
		      <B>theKompany.com</B> has licensed this package
		      for inclusion in their brand new Qt-based
		      <B>Python IDE BlackAdder</B>. It allows
		      developing portable GUI-based database
		      applications which run on Windows and Linux
		      platforms without any change to the source code.

		    <P>
		      BlackAdder includes a <B>1 CPU license</B> for
		      this package at no extra cost, so you may want
		      to check out their great new product. Click on
		      the image to the right to go directly to
		      theKompany.com's secure online shop.

		  </TD></TR>
		</TABLE>
	    
	    </TD>
	    <TD ALIGN="RIGHT" BGCOLOR="#EEEEEE">

<!--
	      <form ACTION="https://www.thekompany.com/products/order/catalog.php3" METHOD="POST" TARGET="theKompanyShop">
		<input type="hidden" name="LinkSource" value="mxODBC">
		<INPUT TYPE="image" NAME="submit" VALUE="submit"
		  SRC="kompanyorder.gif" BORDER="0" ALT="Order" TITLE="Click here go to
		  theKompany.com's online shop">
	      </form>
-->
              <A HREF="https://www.thekompany.com/products/" TARGET="theKompanyShop"><IMG SRC="kompanyorder.gif" BORDER="0" ALT="Click here go to theKompany.com's online shop"></A>

	    </TD></TR>
	</TABLE>
	  
	<P>
	  The following subpackage is included in the COMMERCIAL package:

    <A NAME="mxODBC">

    <H4><A HREF="mxODBC.html">mxODBC - Generic ODBC Interface for Python</A></H4>

    <UL>

	<P>
	  mxODBC is an extension package that provides a Python
	  Database API compliant interface to ODBC capable database
	  drivers and managers (supported ODBC versions are 2.0 -
	  3.5).

	<P>
	  In addition to the capabilities provided through the
	  standard DB API it also gives access to a rich set of
	  catalog methods which allow you to scan the database for
	  tables, procedures, etc.  Furthermore, it uses the
	  mxDateTime package for date/time value interfacing
	  eliminating most of the problems these types normally
	  introduce (other in/output formats are available too).

	<P>
	  The new version does not only allow you to interface to more
	  than one database from one process, it also comes with
	  <B>support for Unicode</B> (which was added to Python in
	  version 2.0).
	  
	<P>
	  The source package includes a varity of preconfigured setups
	  for many commonly used databases such as MySQL, Oracle,
	  Informix, Solid and many more. Precompiled versions of the
	  extension for use with the Windows ODBC manager and the Unix
	  iODBC manager are also available.

    </UL>

    <A NAME="Download-mxCOMMERCIAL">

    <H4>Downloads</H4>
    
    <UL>
      
	<TABLE BGCOLOR="#EEEEEE" CELLPADDING="5">
	  <TR><TD>

	      <P>
		<B>IMPORTANT:</B>

	      <P>
		By downloading, installing or using
		<I>egenix-mx-commercial package</I>, you agree to the
		terms and conditions set forth in the <A
		HREF="mxLicense.html#Commercial">eGenix.com Commercial
		License Agreement</A>. 
	      
	      <P>
		<B>Prerequisites:</B> <BR> 

		The COMMERCIAL package is based on the <A
		HREF="#Download-mxBASE">eGenix.com mx BASE package</A>
		which has to be installed prior to installing the
		COMMERCIAL add-on package.

	      <P>
		<B>Commercial Support:</B> <BR> Professional level <A
		HREF="#Support">support</A> for this package as well
		as all other mx packages is available directly from
		the developers at eGenix.com.

	      <P>
		<B>Consulting:</B> <BR> eGenix.com offers professional
		consulting services around this package, including
		customized modifications, help with application design
		around this package and on-site problem solving.
		Please contact <a
		href="mailto:consulting@egenix.com">mailto:consulting@egenix.com</a>
		for details.

	      <P>
		<B>Free User Support:</B> <BR> We have created a user
		mailing list where users can help users. To sign up,
		please use the <A
		HREF="http://www.egenix.com/mailman/listinfo/egenix-users">egenix-users</A>
		mailing list web-interface.  You can unsubscribe using
		the same interface at any time.

	      <P>
		    <table border="1" cellpadding="5">
			<tr>
			  <td>

			    <B>Commercial Use:</B> <BR> 
			    
			    Users in commercial environments may use
			    this package for an <b>evaluation period
			    of 30 days</b> starting with the day of
			    initial installation. After this period,
			    commercial users must either <A
			    HREF="#BuyLicenses">buy licenses from
			    eGenix.com</A> for continued use or
			    uninstall the package.
    
			  </td>
			</tr>
		    </table>

	      <P>
		Windows:
	      <UL>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-commercial-2.0.4.win32-py1.5.exe">egenix-mx-commercial-2.0.4.win32-py1.5.exe (Windows installer, Python 1.5.2)</A>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-commercial-2.0.4.win32-py2.0.exe">egenix-mx-commercial-2.0.4.win32-py2.0.exe (Windows installer, Python 2.0.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-commercial-2.0.4.win32-py2.1.exe">egenix-mx-commercial-2.0.4.win32-py2.1.exe (Windows installer, Python 2.1.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-commercial-2.0.4.win32-py2.2.exe">egenix-mx-commercial-2.0.4.win32-py2.2.exe (Windows installer, Python 2.2.x)</A> <BR>
	      </UL>

	      <P> Linux:
	      <UL>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-commercial-2.0.4-py1.5_1.i386.rpm">egenix-mx-commercial-2.0.4-py1.5_1.i386.rpm (Binary RPM, i386, Python 1.5.2)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-commercial-2.0.4-py2.0_1.i386.rpm">egenix-mx-commercial-2.0.4-py2.0_1.i386.rpm (Binary RPM, i386, Python 2.0.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-commercial-2.0.4-py2.1_1.i386.rpm">egenix-mx-commercial-2.0.4-py2.1_1.i386.rpm (Binary RPM, i386, Python 2.1.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-commercial-2.0.4-py2.2_1.i386.rpm">egenix-mx-commercial-2.0.4-py2.2_1.i386.rpm (Binary RPM, i386, Python 2.2.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-commercial-2.0.4-py1.5_1.src.rpm">egenix-mx-commercial-2.0.4-py1.5_1.src.rpm (Source RPM, src, Python 1.5.2)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-commercial-2.0.4-py2.0_1.src.rpm">egenix-mx-commercial-2.0.4-py2.0_1.src.rpm (Source RPM, src, Python 2.0.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-commercial-2.0.4-py2.1_1.src.rpm">egenix-mx-commercial-2.0.4-py2.1_1.src.rpm (Source RPM, src, Python 2.1.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-commercial-2.0.4-py2.2_1.src.rpm">egenix-mx-commercial-2.0.4-py2.2_1.src.rpm (Source RPM, src, Python 2.2.x)</A> <BR>
	      </UL>

	      <P>
		All Platforms (source distribution):
	      <UL>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-commercial-2.0.4.zip">egenix-mx-commercial-2.0.4.zip (all platforms, C compiler, Python 1.5.2, 2.0, 2.1.x, 2.2.x)</A> 
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-commercial-2.0.4.tar.gz">egenix-mx-commercial-2.0.4.tar.gz (all platforms, C compiler, Python 1.5.2, 2.0, 2.1.x, 2.2.x)</A> <BR>
	      </UL>

	      <P>
		<B>Notes:</B> 

	      <P>
	      <UL>
		<LI>
		  The <B>Windows installer</B> only includes the
		  <CODE>mx.ODBC.Windows</CODE> subpackage as this it
		  the only one relevant on Windows. Please always
		  download the correct installer for your Python
		  version, otherwise you won't be able to install the
		  packages.
		  <P>

		<LI>
		  The <B>Linux binary RPMs</B> only include the
		  subpackages <CODE>mx.ODBC.iODBC</CODE> (<A
		  HREF="http://www.iodbc.org/">iODBC Driver
		  Manager</A> maintained by <A
		  HREF="http://www.openlinksw.com/">OpenLink</A>) and
		  <CODE>mx.ODBC.unixODBC</CODE> (<A
		  HREF="http://www.unixODBC.org/">unixODBC Driver
		  Manager</A>). You normally have these installed on
		  your system if you happen to use an ODBC capable
		  database on your Linux machine. When installing
		  packages for multiple Python versions, be sure to
		  first install the RPM for the oldest Python version
		  and then proceed with the more recent ones (or use
		  the <CODE>--force</CODE> option to install them in
		  any order).  Note that the above RPMs install the
		  extensions into <TT>/usr</TT> not
		  <TT>/usr/local</TT> as previous versions did !
		  <P>

		<LI>
		  If you want to interface directly to an ODBC driver
		  using one of the other subpackages, please download
		  the source version and proceed as described in the
		  package documentation. Be warned though, that this
		  is not a simple task and requires much knowledge
		  about C programming, the C compiler and ODBC at the
		  C level. eGenix.com will also make precompiled
		  versions of other subpackages available if there is
		  demand.
		  <P>

		<LI>
		  Please note that redistribution of these files is
		  not allowed. Contact <A
		  HREF="mailto:licenses@egenix.com">licenses@egenix.com</A>
		  for details about redistribution terms.
		  <P>

	      </UL>

	    </TD></TR>
	</TABLE>
	
    </UL>

    <A NAME="Install-mxCOMMERCIAL">

    <H4>Installation</H4>

    <UL>
    
	<P>
	  On Unix systems supporting the <B>RPM formats</B> the
	  package can be installed using the standard operating system
	  tools, e.g. <CODE>rpm -i
	  egenix-mx-commercial-xxxx.rpm</CODE> will install the
	  package and <CODE>rpm -e egenix-mx-commercial-xxxx</CODE>
	  deinstall it. If you don't have both iODBC and unixODBC
	  installed on your system, you should try to run <CODE>rpm -i
	  --nodeps egenix-mx-commercial-xxxx.rpm</CODE>. This will
	  skip the dependency checks and forces an install even though
	  RPM cannot find all required libs.

	<P>
	  On <B>Windows platforms</B> the preferred method for
	  installation is using the the Windows installer, since this
	  doesn't require a C compiler to be installed on the system.
	  Thanks to Thomas Heller the installer also supports
	  uninstall using the standard Windows uninstall procedure.
	  If you have trouble selecting the right Python installation,
	  you can also install the package using e.g. WinZIP -- the
	  installer .exe is a readable ZIP archive. You'll loose the
	  ability to uninstall the package, but at least you can get
	  at the included files. For Python 2.1 and below, unzip into
	  <TT>\Python\Lib</TT>; starting with Python 2.2, unzip into
	  <TT>\Python\Lib\site-packages</TT>.

	<P>
	  All other platforms can use the <A
	  HREF="http://www.python.org/sigs/distutils-sig/">distutils</A>
	  based installation which allows building and installing the
	  package using the installed Python interpreter and the
	  standard system C compiler.  On such a system, unzip the
	  package archive to a temporary directory and then run
	  <CODE>python setup.py install</CODE> to install the package
	  and <CODE>python setup.py uninstall</CODE> to uninstall it
	  again.  Documentation about the usage of distutils (which is
	  part of Python since 2.0) is available online at the <A
	  HREF="http://www.python.org/sigs/distutils-sig/doc/">distutils
	  documentation</A> site.

    </UL>

    <A NAME="BuyLicenses">

    <H4>Buying Commercial Use Licenses</H4>

    <UL>

	<P>
	  Starting with mxODBC version 2.0.0, commercial use is no
	  longer free of charge.  In order to fund the continued
	  development of mxODBC and the other Open Source packages in
	  the mx Extension Series, I had to put a moderate license fee
	  on mxODBC -- the previous MySQL-style license model just
	  didn't work out.

	<P>
	<TABLE BGCOLOR="#EEEEEE" CELLPADDING="5" CELLSPACING="0" BORDER="0">
	  <TR><TD BGCOLOR="#96c8fa">

	      <P>
		<B> License Offerings </B>

	    </TD></TR>

	  <TR><TD> </TD></TR>

	  <TR><TD>

	      <P>
		<B> End-User </B>

	      <P>
		Licenses for commercial end-users are available as CPU
		licenses which allow installing and using mxODBC on
		one machine. 

	      <P>
		Pricing is USD 75.00 for a 1-CPU license, for volume
		discounts, please see the <A
		HREF="http://shop.egenix.com/"><b>eGenix.com
		Online Shop</b></A>. We also offer site and corporate
		licenses; please write to <A
		HREF="mailto:sales@egenix.com">sales@egenix.com</A>
		for quotes on these.

	    </TD></TR>

	  <TR><TD> </TD></TR>

	  <TR><TD>

	      <P>
		<B> Developers </B>

	      <P>
		For developers we have added a <I>Developer CPU
		license</I> which allows redistribution of mxODBC as
		part of products built using the developer
		license. The Developer CPU license costs USD 1,250.00
		per developer CPU.

	      <P>
		If you want to redistribute mxODBC as part of a
		product on a per-CPU basis (rather than on a
		per-developer basis), we have a special license
		agreement for this as well. Please send your request
		to <A
		HREF="mailto:licenses@egenix.com">licenses@egenix.com</A>.

	    </TD></TR>
	</TABLE>

	<P>
	  <B>Ordering</B>

	<P>
	  mxODBC and all other mx packages are now maintained by my
	  company eGenix.com Software GmbH, Langenfeld in Germany. To
	  buy licenses for commercial use, please visit our secure
	  <B><A
	  HREF="http://shop.egenix.com/">eGenix.com
	  Online Shop</A></B> which is powered by <A
	  HREF="http://www.shareit.com/">ShareIT.com</A>. Payment
	  options include credit card, bank/wire transfer, check and
	  cash billed in either USD (US dollars) or EUR (Euro).

	<P>
	  When ordering a license, you will receive a license key by
	  <B>email</B> which identifies your license and works as
	  temporary Proof of Authorization for the version you ordered
	  as mentioned in the <A
	  HREF="mxLicense.html#Commercial">eGenix.com Commercial
	  License</A>.

	<P>
	  When ordering a license, you will receive a license key by
	  <B>email</B> which identifies your license and works as
	  temporary Proof of Authorization for the version you ordered
	  as mentioned in the <A
	  HREF="mxLicense.html#Commercial">eGenix.com Commercial
	  License</A>.  After having received the order, eGenix.com
	  will then send you a signed Proof of Authorization within
	  four weeks.

	<P>
	  For more details on payment options and licensed usage,
	  please check the <A
	  HREF="http://shop.egenix.com/">eGenix.com
	  Online Shop</A> and the <A HREF="mxLicense.html">eGenix.com
	  Licenses</A>.

	<P>
	  <B>Support</B>

	<P>
	  Support for the Python mx Extensions is available as
	  well. See the <A HREF="#Support">Support Section</A> of this
	  page for details.

	<P>
	  Please send support questions regarding the new licenses to
	  <A
	  HREF="mailto:licenses@egenix.com">licenses@egenix.com</A>.

	<P>
	  If you want to know more about the provided services, please
	  contact the <A HREF="mailto:info@egenix.com">eGenix.com Information
	  Desk</A>.

    </UL>

    <P>
    
    <A NAME="History-mxCOMMERCIAL">

    <H4>History</H4>

    <UL>

	<P>
	   Note that this change log only lists changes to the package
	   in general, not all the changes to the included
	   subpackages. Please refer to the subpackage documentation
	   for more detailed information.

<!--
	<P>Changes from 2.0.6 to 2.1.0:

	<UL>

	    <LI> The usual bunch of small ODBC driver compatibility
	    fixes for mxODBC.

            <P><LI> Lots of enhancements in mxODBC. See the mxODBC
            documentation for details.
             
	    <P><LI> Fixed a bug in the distutils extension building
            mechanism which causes the compiler to share object
            between multiple subpackages. This caused e.g. the
            unixODBC (which is built after the iODBC package in
            standard builds) to not use unixODBC, but iODBC instead.

            <P><LI> <B>Changed</B> the error class object fullnames to
            properly include the complete package path.

	    <P><LI> Added better support for Python DEBUG builds. The
	    total reference counting should now also work in case
	    object constructors raise exceptions.

	</UL>
-->

	<P>Changes from 2.0.5 to 2.0.6:

	<UL>

	    <LI> Added Python 2.3. support.

	</UL>

	<P>Changes from 2.0.4 to 2.0.5:

	<UL>

	    <LI> Added full Unicode support for longchar and ntext
	    columns for MS SQL Server and MS Access ODBC drivers.

	    <P><LI> Moved the RPM installation paths from /usr/local
	    to /usr to be compliant to the standard Python RPMs which
	    are made available on python.org.

	</UL>

	<P>Changes from 2.0.3 to 2.0.4:

	<UL>

	    <LI> Enhanced compatiblity to Unicode-aware ODBC drivers
	    such as the latest MS SQL Server and MS Access ODBC
	    drivers.

            <P><LI> Minor fixes to workaround problems with buggy ODBC
            drivers.

	</UL>

	<P>Changes from 2.0.2 to 2.0.3:

	<UL>

	    <P><LI> Added compiler support for Cygwin. Thanks to Mark
	    Hadfield for pointing out the necessary changes.

	    <P><LI> Reworked the RPM packaging for different Python
	    versions: you can now install the RPMs for different
	    Python versions side-by-side.

	</UL>

	<P>Changes from 2.0.1 to 2.0.2:

	<UL>

	    <P><LI> New release for Python 2.1.

	</UL>

	<P>Changes from 2.0.0 to 2.0.1:

	<UL>

	    <P><LI> Added work-arounds to aid in connecting to
	    databases using the Windows ODBC manager.

	</UL>

    </UL>

    </UL>

    <P>
    
    <A NAME="mxEXPERIMENTAL">
      
    <HR SIZE=1 NOSHADE WIDTH="100%">

    <H3>eGenix.com mx Extensions - EXPERIMENTAL Package</H3>

    <DIV ALIGN=RIGHT>
      <SMALL>
	&nbsp; <FONT COLOR="#FF0000">Version 0.7.0</FONT> &nbsp;
      </SMALL>
    </DIV>

    <UL>

	<P>
	  The eGenix.com mx EXPERIMENTAL package contains experimental
	  software which will eventually be integrated into one of the
	  standard eGenix.com mx Extension series packages.

	<P>
	  The package may contain subpackages which are shipped under
	  the <A HREF="mxLicense.html#Public">eGenix.com Public
	  License Agreement</A>, the <A
	  HREF="mxLicense.html#Commercial">eGenix.com Commercial
	  License Agreement</A> and other licenses such
	  as the Library GNU Public License (LGPL) or MIT licenses.

	<P>
	  Please note that the software in these packages is still in
	  alpha or beta state and does not meet the quality standards
	  of production quality software.

	<P>
	  The following subpackages are included in the EXPERIMENTAL package:

    <A NAME="mxNumber">

    <H4><A HREF="mxNumber.html">mxNumber - Extended Numeric Types</A></H4>

    <UL>

	<P>
	  mxNumber is an extension package which provides access to a
	  new set of basic numeric types. 

	<P>
          The package uses the <A
          HREF="http://http://www.swox.com/gmp/">GNU Multi-Precision
          Library (GMP)</A> as basis for providing this functionality
          at high performance on a wide range of platforms including
          all Unix and Windows platforms. This library is licensed
          under the Library GNU Public License (LGPL) which means that
          it does not have the viral character as the standard GPL
          does. It usable with software which is not GPL-compatible,
          such as closed-source commercial software.

	<P>
	  This mxNumber package is licensed under the <A
	  HREF="mxLicense.html#Public">eGenix.com Public License
	  Agreement</A>; the Windows package also
	  includes a pre-compiled version of the <A
	  HREF="http://http://www.swox.com/gmp/">GNU Multi-Precision
	  Library (GMP)</A> which eGenix.com ported to Windows. The
	  patches needed for porting GMP to Windows are also included
	  in the source package.

	<P>
          <B>Note:</B> mxNumber relies on the new coercions features
          in Python 2.1. Older Python versions are not supported and
          mxNumber won't run with these versions.
	      

    </UL>

    <A NAME="mxTidy">

    <H4><A HREF="mxTidy.html">mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool)</A></H4>

    <UL>

	<P>
	  mxTidy provides a Python interface to a thread-safe, library
	  version of the <a
	  href="http://www.w3.org/People/Raggett/tidy/">HTML Tidy</a>.
	  command line tool.

	<P>
	  HTML Tidy helps you to cleanup coding errors in HTML and XML
	  files and produce well-formed HTML, XHTML or XML as output.
	  This allows you to preprocess web-page for inclusion in XML
	  repositories, prepare broken XML files for validation and
	  also makes it possible to write converters from well-known
	  word processing applications such as MS Word to other
	  structured data representations by using XML as intermediate
	  format.

    </UL>

    <A NAME="Download-mxEXPERIMENTAL">

    <H4>Downloads</H4>
    
    <UL>
      
	<TABLE BGCOLOR="#EEEEEE" CELLPADDING="5">
	  <TR><TD>
	      
	      <P>
		<B>IMPORTANT:</B>

	      <P>
		By downloading, installing or using the
		<I>egenix-mx-experimental package</I>, you agree to
		the terms and conditions set forth by the licenses of
		the included subpackages (see previous section for
		details).
    
	      <P>
		<B>Prerequisites:</B> <BR> 
		The EXPERIMENTAL package is based on the 
		<A HREF="#Download-mxBASE">eGenix.com mx
		BASE package</A> which has to be installed prior to installing
		the EXPERIMENTAL add-on package.

	      <P>
		<B>Commercial Support:</B> <BR> Professional level <A
		HREF="#Support">support</A> for this package as well
		as all other mx packages is available directly from
		the developers at eGenix.com.

	      <P>
		<B>Consulting:</B> <BR> eGenix.com offers professional
		consulting services around this package, including
		customized modifications, help with application design
		around this package and on-site problem solving.
		Please contact <a
		href="mailto:consulting@egenix.com">mailto:consulting@egenix.com</a>
		for details.

	      <P>
		<B>Free User Support:</B> <BR> We have created a user
		mailing list where users can help users. To sign up,
		please use the <A
		HREF="http://www.egenix.com/mailman/listinfo/egenix-users">egenix-users</A>
		mailing list web-interface.  You can unsubscribe using
		the same interface at any time.

	      <P>
		Windows:
	      <UL>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-experimental-0.7.0.win32-py1.5.exe">egenix-mx-experimental-0.7.0.win32-py1.5.exe (Windows installer, Python 1.5.2)</A>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-experimental-0.7.0.win32-py2.0.exe">egenix-mx-experimental-0.7.0.win32-py2.0.exe (Windows installer, Python 2.0.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-experimental-0.7.0.win32-py2.1.exe">egenix-mx-experimental-0.7.0.win32-py2.1.exe (Windows installer, Python 2.1.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-experimental-0.7.0.win32-py2.2.exe">egenix-mx-experimental-0.7.0.win32-py2.2.exe (Windows installer, Python 2.2.x)</A> <BR>
	      </UL>

	      <P> Linux:
	      <UL>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-experimental-0.7.0-py1.5_1.i386.rpm">egenix-mx-experimental-0.7.0-py1.5_1.i386.rpm (Binary RPM, i386, Python 1.5.2)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-experimental-0.7.0-py2.0_1.i386.rpm">egenix-mx-experimental-0.7.0-py2.0_1.i386.rpm (Binary RPM, i386, Python 2.0.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-experimental-0.7.0-py2.1_1.i386.rpm">egenix-mx-experimental-0.7.0-py2.1_1.i386.rpm (Binary RPM, i386, Python 2.1.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-experimental-0.7.0-py2.2_1.i386.rpm">egenix-mx-experimental-0.7.0-py2.2_1.i386.rpm (Binary RPM, i386, Python 2.2.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-experimental-0.7.0-py1.5_1.src.rpm">egenix-mx-experimental-0.7.0-py1.5_1.src.rpm (Source RPM, src, Python 1.5.2)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-experimental-0.7.0-py2.0_1.src.rpm">egenix-mx-experimental-0.7.0-py2.0_1.src.rpm (Source RPM, src, Python 2.0.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-experimental-0.7.0-py2.1_1.src.rpm">egenix-mx-experimental-0.7.0-py2.1_1.src.rpm (Source RPM, src, Python 2.1.x)</A> <BR>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-experimental-0.7.0-py2.2_1.src.rpm">egenix-mx-experimental-0.7.0-py2.2_1.src.rpm (Source RPM, src, Python 2.2.x)</A> <BR>
	      </UL>

	      <P>
		All Platforms (source distribution):
	      <UL>
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-experimental-0.7.0.zip">egenix-mx-experimental-0.7.0.zip (all platforms, C compiler, 1.5.2, 2.0.x, 2.1.x, 2.2.x)</A> 
		<LI> <A HREF="http://www.egenix.com/files/python/egenix-mx-experimental-0.7.0.tar.gz">egenix-mx-experimental-0.7.0.tar.gz (all platforms, C compiler, 1.5.2, 2.0.x, 2.1.x, 2.2.x)</A> <BR>
	      </UL>

	    </TD></TR>
	</TABLE>
	
    </UL>

    <A NAME="Install-mxEXPERIMENTAL">

    <H4>Installation</H4>

    <UL>
    
	<P>
	  On Unix systems supporting the <B>RPM formats</B> the
	  package can be installed using the standard operating system
	  tools, e.g. <CODE>rpm -i
	  egenix-mx-experimental-xxxx.rpm</CODE> will install the
	  package and <CODE>rpm -e egenix-mx-experimental-xxxx</CODE>
	  deinstall it. When installing packages for multiple Python
	  versions, be sure to first install the RPM for the oldest
	  Python version and then proceed with the more recent ones
	  (or use the <CODE>--force</CODE> option to install them in
	  any order).

	<P>
	  On <B>Windows platforms</B> the preferred method for
	  installation is using the the Windows installer, since this
	  doesn't require a C compiler to be installed on the system.
	  Thanks to Thomas Heller the installer also support uninstall
	  using the standard Windows uninstall procedure.

	<P>
	  All other platforms can use the <A
	  HREF="http://www.python.org/sigs/distutils-sig/">distutils</A>
	  based installation which allows building and installing the
	  package using the installed Python interpreter and the
	  standard system C compiler.  On such a system, unzip the
	  package archive to a temporary directory and then run
	  <CODE>python setup.py install</CODE> to install the package
	  and <CODE>python setup.py uninstall</CODE> to uninstall it
	  again.  Documentation about the usage of distutils (which is
	  part of Python since version 2.0) is available online at the <A
	  HREF="http://www.python.org/sigs/distutils-sig/doc/">distutils
	  documentation</A> site.

    </UL>
    
    <P>

    <A NAME="History-mxEXPERIMENTAL">

    <H4>History</H4>

    <UL>

	<P>
	   Note that this change log only lists changes to the package
	   in general, not all the changes to the included
	   subpackages. Please refer to the subpackage documentation
	   for more detailed information.

<!--

	<P>Changes from 0.8.0 to 2.1.0:

	<UL>

            <LI> <B>Moved</B> mxURL and mxUID into the BASE package.

	    <P><LI> Added better support for Python DEBUG builds. The
	    total reference counting should now also work in case
	    object constructors raise exceptions.

	    <P><LI> Synchronized the version number to the BASE package.

	</UL>

-->

	<P>Changes from 0.7.0 to 0.8.0:

	<UL>

            <LI> Added Python 2.3 support.

	</UL>

	<P>Changes from 0.6.0 to 0.7.0:

	<UL>

            <LI> <B>Changed</B> the error class object fullnames to
            properly include the complete package path.

            <P><LI> Fixed a bug in the distutils setup which caused
            the linking of mxNumber against GMP to be skipped on Unix
            platforms. Thanks to Keith Briggs for pointing me to this
            bug.

	    <P><LI> Moved the RPM installation paths from /usr/local
	    to /usr to be compliant to the standard Python RPMs which
	    are made available on python.org.

	    <P><LI> Fixed a UTF-8 related bug in mxTidy.

	</UL>

	<P>Changes from 0.5.0 to 0.6.0:

	<UL>

            <LI> Added new packages mxURL and mxUID.

            <P><LI> The package now depends on the BASE package (at
            least the new subpackages mx.URL and mx.UID do).

	</UL>

	<P>Changes from 0.4.0 to 0.5.0:

	<UL>

            <LI> Added some missing header files. These are needed
            by third party tools in case they rely on the provided C
            interfaces.

            <P><LI> Bugfixes in mxTidy, version 0.2.0.

	</UL>

	<P>Changes from 0.3.0 to 0.4.0:

	<UL>

	    <LI> Added new experimental package mxTidy.

	    <P><LI> Reworked the docs a little and corrected the
	    misnaming of mxNumber (it was called mxNumeric in a few
	    places).

            <P><LI> Minor tweaks to the mxNumber package.

            <P><LI> Added some missing header files. These are needed
            by third party tools in case they rely on the provided C
            interfaces.

	</UL>

	<P>Changes from 0.2.0 to 0.3.0:

	<UL>

	    <LI> Updated mxNumber to version 0.3.0.

	    <P><LI> Reworked the RPM packaging for different Python
	    versions: you can now install the RPMs for different
	    Python versions side-by-side.

	</UL>

    </UL>

    </UL>

    <P>

    <A NAME="Support">

    <HR SIZE=1 NOSHADE WIDTH="100%">

    <H3>Commercial Support</H3>

    <UL>

        <P>
	  Commercial email support for all mx packages is now
	  available from my company eGenix.com GmbH, Langenfeld,
	  Germany.

	<P>
	  Due to popular demand, I have setup a per-incident support
	  service which is based on support tickets. A ticket for USD
	  150.00 is valid for one support incident and includes up to
	  one hour of consulting work. Tickets can be bought online
	  from the secure <B><A
	  HREF="http://shop.egenix.com/">eGenix.com
	  Online Shop</A></B> which is powered by <A
	  HREF="http://www.shareit.com/">ShareIT.com</A>.

	<P>
	  Support for the Python mx Extensions is available as email
	  support only. Support languages are English or
	  German. 

	<P>
	  Please send support questions to <A
	  HREF="mailto:support@egenix.com?subject=%3Cquestion%3E%20(Ref%23%20%3Cyour%20ticket%20order%20ID%20goes%20here%3E)">support@egenix.com</A>
	  together with the order reference ID (the ticket ID) you
	  receive by email when buying tickets in the subject line,
	  e.g. "mxODBC and Sybase (Ref# 667514)".

	<P>
	  If you want to know more about the provided services, please
	  contact the <A HREF="mailto:info@egenix">eGenix.com Information
	  Desk</A>.

    </UL>

    <A NAME="Trademark"></A>

    <HR WIDTH="100%">
    <CENTER><FONT SIZE=-1>
	
	&copy; 1997-2000, Copyright by Marc-Andr&eacute; Lemburg; All
	Rights Reserved. mailto: <A
	HREF="mailto:mal@lemburg.com">mal@lemburg.com</A>
	<BR>
	&copy; 2000-2001, Copyright by eGenix.com Software GmbH,
	Langenfeld; All Rights Reserved. mailto: <A
	HREF="mailto:info@egenix.com">info@egenix.com</A>
	<BR>
	Trademarks: "mx Extensions" is a trademark of Marc-Andre
	Lemburg and eGenix.com GmbH.  

      </FONT></CENTER>

  </BODY>
</HTML>
